Глава II
2.2. Определение и свойства базисных функций B-сплайнов

Есть несколько способов, чтобы определить базисные функции B-сплайна и дока­зать их важные свойства, например, разделенных разностей усеченных функций мощ­ности [Curr47; Scho46], расцвета [Rams87], и повторяемости формулы. Мы используем рекуррентную формулу [Cox72; DeBo72, 78], так как это наиболее полезно для ком­пьютерной реализации.

Пусть `U={u_0,…,u_m}` неубывающая последовательность вещественных чисел, т. е. `u_i≤u_{i+1},i=0,…,m-1`. Где `u_i` называются узлы, и `U` является узловым векто­ром. `i`ая базисная функция B-сплайна `p`-й степени (порядок `p+1`), обозначается `N_{i,p}(u)`, оп­реде­ляется как

`N_{i,0}(u)={(1   "если"   u_i≤u≤u_{i+1}),(0   "в противном случае"):}`

`N_{i,p}(u)=(u-u_i)/(u_{i+p}-u_i)N_{i,p-1}(u)+(u_{i+p+1}-u)/(u_{i+p+1}-u_{i+1})N_{i+1,p-1}(u)`(2.5)

Обратите внимание, что

Рисунок 2.3. Рекурсивное определение базисных функций B-сплайна.

`N_{0,0}`
`N_{0,1}`
`N_{1,0}` `N_{0,2}`
`N_{1,1}` `N_{0,3}`
`N_{2,0}` `N_{1,2}`
`N_{2,1}` `N_{1,3}`
`N_{3,0}` `N_{2,2}` `vdots`
`N_{3,1}` `vdots`
`N_{4,0}` `vdots`
`vdots`
Для краткости мы часто пишем `N_{i,p}` вместо `N_{i,p}(u)`.

Слово о терминологии. В разделе 2.1, мы использовали термин точка прерывания и требовали `u_i<u_{i+1}` для всех `i`. В оставшейся части этой книги, мы будем использо­вать термин узел и предположим, `u_i≤u_{i+1}`. Точки прерывания соответствуют набору различных значений узлов, а промежуточные узлы ненулевой длины определяются от­дельными многочленным сегментом. Таким образом, мы используем слово узел с дву­мя разными значениями: отдельное значение (точка прерывания) в наборе `U`, и элемент множества `U` (могут существовать дополнительные узлы в `U`, имеющие одинаковое значение). Это должно быть ясно из контекста, что подразумевается.

Примеры

Пример2.1 Пусть `U={u_0=0,u_1=0,u_2=0,u_3=1,u_4=1,u_5=1}` и `p=2`. Вычислим теперь базисную функцию B-сплайна степеней 0, 1, и 2

`N_{0,0}=N_{1,0}=0`   `-oo<u<oo`

`N_{2,0}={(1   0<=u<1),(0   "иначе"):}`

`N_{3,0}=N_{4,0}=0`   `-oo<u<oo`

`N_{0,1}={u-0}/{0-0}N_{0,0}+{0-u}/{0-0}N_{1,0}=0`   `-oo<u<oo`

`N_{1,1}={u-0}/{0-0}N_{1,0}+{1-u}/{1-0}N_{2,0}={(1-u,0<=u<1),(0,"иначе"):}`

`N_{2,1}={u-0}/{1-0}N_{2,0}+{1-u}/{1-1}N_{3,0}={(u,0<=u<1),(0,"иначе"):}`

`N_{3,1}={u-1}/{1-1}N_{3,0}+{1-u}/{1-1}N_{4,0}=0`   `-oo<u<oo`

`N_{0,2}={u-0}/{0-0}N_{0,1}+{1-u}/{1-0}N_{1,1}={((1-u)^2,0<=u<1),(0,"иначе"):}`

`N_{1,2}={u-0}/{1-0}N_{1,1}+{1-u}/{1-0}N_{2,1}={(2u(1-u),0<=u<1),(0,"иначе"):}`

`N_{2,2}={u-0}/{1-0}N_{2,1}+{1-u}/{1-1}N_{3,1}={(u^2,0<=u<1),(0,"иначе"):}`

Отметим, что `N_{i,2}`, ограниченные интервалом `u in [0,1]`, являются квадратичными многочленами Бернштейна (раздел 1.3 и рисунок 1.13b). По этой причине B-сплайн-представление с вектором узла вида

`U="{"ubrace(0,ldots,0)_(p+1),ubrace(1,ldots,1)_(p+1)"}"`

является обобщением представления Безье.
Пример2.2 Пусть `U={u_0=0,u_1=0,u_2=0,u_3=1,u_4=2,u_5=3,u_6=4,u_7=4,u_8=5,u_9=5,u_10=5}` и `p=2`. Нулевой-, первый-, и базисные функции второй степени вычисляются здесь. Те, которые не равны нулю показаны на рисунках 2.4, 2.5 и 2.6 соответственно

`N_{0,0}=N_{1,0}=0`   для  `-oo<u<oo`

`N_{2,0}={(1   0<=u<1),(0   "иначе"):}`

`N_{3,0}={(1   1<=u<2),(0   "иначе"):}`

`N_{4,0}={(1   2<=u<3),(0   "иначе"):}`

`N_{5,0}={(1   3<=u<4),(0   "иначе"):}`

`N_{6,0}=0`   для  `-oo<u<oo`

`N_{7,0}={(1   4<=u<5),(0   "иначе"):}`

`N_{8,0}=N_{9,0}=0`   для  `-oo<u<oo`

`N_{0,1}={u-0}/{0-0}N_{0,0}+{0-u}/{0-0}N_{1,0}=0`   `-oo<u<oo`

`N_{1,1}={u-0}/{0-0}N_{1,0}+{1-u}/{1-0}N_{2,0}={(1-u,0<=u<1),(0,"иначе"):}`

`N_{2,1}={u-0}/{1-0}N_{2,0}+{2-u}/{2-1}N_{3,0}={(u,0<=u<1),(2-u,1<=u<2),(0,"иначе"):}`

`N_{3,1}={u-1}/{2-1}N_{3,0}+{3-u}/{3-2}N_{4,0}={(u-1,1<=u<2),(3-u,2<=u<3),(0,"иначе"):}`

`N_{4,1}={u-2}/{3-2}N_{4,0}+{4-u}/{4-3}N_{5,0}={(u-2,2<=u<3),(4-u,3<=u<4),(0,"иначе"):}`

`N_{5,1}={u-3}/{4-3}N_{5,0}+{4-u}/{4-4}N_{6,0}={(u-3,3<=u<4),(0,"иначе"):}`

`N_{6,1}={u-4}/{4-4}N_{6,0}+{5-u}/{5-4}N_{7,0}={(5-u,4<=u<5),(0,"иначе"):}`

`N_{7,1}={u-4}/{5-4}N_{7,0}+{5-u}/{5-5}N_{8,0}={(u-4,4<=u<5),(0,"иначе"):}`

`N_{8,1}={u-5}/{5-5}N_{8,0}+{5-u}/{5-5}N_{9,0}=0`   `-oo<u<oo`

Все последующие `N_{i,2}` по оси ноль везде, кроме указанных интервалов, то есть

`N_{0,2}={u-0}/{0-0}N_{0,1}+{1-u}/{1-0}N_{1,1}=(1-u)^2`   `0<=u<1`

`N_{1,2}={u-0}/{1-0}N_{1,1}+{2-u}/{2-0}N_{2,1}={(2u-3⁄2u^2,0<=u<1),(1⁄2(2-u)^2,1<=u<2):}`

`N_{2,2}={u-0}/{2-0}N_{2,1}+{3-u}/{3-1}N_{3,1}={(1⁄2u^2,0<=u<1),(-3⁄2+3u-u^2,1<=u<2),(1⁄2(3-u)^2,2<=u<3):}`

`N_{3,2}={u-1}/{3-1}N_{3,1}+{4-u}/{4-2}N_{4,1}={(1⁄2(u-1)^2,1<=u<2),(-11⁄2+5u-u^2,2<=u<3),(1⁄2(4-u)^2,3<=u<4):}`

`N_{4,2}={u-2}/{4-2}N_{4,1}+{4-u}/{4-3}N_{5,1}={(1⁄2(u-2)^2,2<=u<3),(-16+10u-3⁄2u^2,3<=u<4):}`

`N_{5,2}={u-3}/{4-3}N_{5,1}+{5-u}/{5-4}N_{6,1}={((u-3)^2,3<=u<4),((5-u)^2,4<=u<5):}`

`N_{6,2}={u-4}/{5-4}N_{6,1}+{5-u}/{5-4}N_{7,1}=2(u-4)(5-u)`   `4<=u<5`

`N_{7,2}={u-4}/{5-4}N_{7,1}+{5-u}/{5-5}N_{8,1}=(u-4)^2`   `4<=u<5`

Рисунок 2.4. Ненулевые базисные функции нулевой степени, `U={0,0,0,1,2,3,4,4,5,5,5}`

Рисунок 2.5. Ненулевые базисные функции первой степени, `U={0,0,0,1,2,3,4,4,5,5,5}`

Рисунок 2.6. Ненулевые базисные функции второй степени, `U={0,0,0,1,2,3,4,4,5,5,5}`

Теперь мы перечислим ряд важных свойств базисных функций B-сплайнов. Как мы увидим в следующей главе, эти свойства, которые определяют многие желательные геометрические характеристики в кривых B-сплайнов и поверхностей. Предположим, степень `p` и узловой вектор `U={u_0,…,u_m}`.

Св.2.1 `N_{i,p}(u)=0` если u находится за пределами интервала `[u_i,u_{i+p+1}` (свойство локальной поддержки). Это иллюстрируется треугольной схемой, показанной здесь. Обратите внимание, что `N_{1,3}` является сочетание `N_{1,0}`, `N_{2,0}`, `N_{3,0}`, и `N_{4,0}`. Таким образом, `N_{1,3}` отлична от нуля только для и `u∈[u_1,u_5)`
`N_{1,0}` `N_{0,2}`
`N_{1,1}` `N_{0,3}`
`N_{2,0}` `N_{1,2}`
`N_{2,1}` `N_{1,3}`
`N_{3,0}` `N_{2,2}`
`N_{3,1}` `N_{2,3}`
`N_{4,0}` `N_{3,2}`
Св.2.2 В любом промежуточном узле, `[u_j,u_{j+1})`, не превосходит `p+1` если `N_{i,p}` отличны от нуля, а именно функции `N_{j-p,p},…,N_{j,p}`. `[u_3,u_4)` отличны от нуля только функция нулевой степени `N_{3,0}`. Таким образом, только кубическая функция не равна нулю на `[u_3,u_4)` являются `N_{0,3},…,N_{3,3}`. Это свойство проиллюстрировано здесь
`N_{1,1}` `N_{0,3}`
`N_{2,0}` `N_{1,2}`
`N_{2,1}` `N_{1,3}`
`N_{3,0}` `N_{2,2}`
`N_{3,1}` `N_{2,3}`
`N_{4,0}` `N_{3,2}`
`N_{4,1}` `N_{3,3}`
Св.2.3 `N_{i,p}(u)≥0` для всех `i`, `p`, и `u` (неотрицательных). Это доказано индукцией по `p`. Это, очевидно, справедливо для `p=0`; предположить, что это верно для `p-1`, `p≥0`, с `i` и `u` произвольными. По определению

`N_{i,p}(u)={u-u_i}/{u_{i+p}-u_i}N_{i,p-1}(u)+{u_{i+p+1}-u}/{u_{i+p+1}-u_{i+1}}N_{i+1,p-1}(u)` (2.6)

Из Св.2.1, `N_{i,p-1}(u)=0` если `u∈[u_i,u_{i+p+1})`. Но если `u∈[u_i,u_{i+p+1})`, то следует

`{u-u_i}/{u_{i+p}-u_i}`

неотрицательна. По предположению, `N_{i,p-1}(u)` неотрицательна, и, таким образом первый член уравнения (2.6) неотрицателен. То же самое верно и для второй части, и, следователь­но, `N_{i,p}(u)` неотрицательны;
Св.2.4 Для произвольного промежуточного узла, `[u_i,u_{i+1})`, `∑_{j=i-p}^iN_{j,p}(u)=1` для всех `u∈[u_i,u_{i+1})` (разбиение единицы). Чтобы доказать это, рассмотрим

`sum_{j=i-p}^iN_{j,p}(u)=sum_{j=i-p}^i{u-u_j}/{u_{j+p}-u_j}N_{j,p-1}(u)+sum_{j=i-p}^i{u_{j+p+1}-u}/{u_{j+p+1}-u_{j+1}}N_{j+1,p-1}(u)`

Изменение переменной суммирования во второй сумме от `i-p` до `i-p+1`, и учитывая, что `N_{i-p,p-1}(u)=N_{i+1,p-1}(u)=0`, мы имеем

`sum_{j=i-p}^iN_{j,p}(u)=sum_{j=i-p+1}^i[{u-u_j}/{u_{j+p}-u_j}+{u_{j+p}-u}/{u_{j+p}-u_j}]N_{j,p-1}(u)=sum_{j=i-p+1}^iN_{j,p-1}(u)`

Применение же концепции рекурсивно дает

`sum_{j=i-p}^iN_{j,p}(u)=sum_{j=i-p+1}^iN_{j,p-1}(u)=sum_{j=i-p+2}^iN_{j,p-2}(u)=⋯=sum_{j=i}^iN_{j,0}(u)=1`

Св.2.5 Все производные `N_{i,p}(u)` существуют в интерьере промежуточного узла (где многочлен, рис 2.7). В узле `N_{i,p}(u)` `p-k` раз непрерывно дифференцируема, где `k` является кратность узла. Следовательно, увеличение степени увеличивает непрерывность и увеличение кратности узла уменьшается непрерывность;

Рисунок 2.7. Разложение `N_{3,2}` на его многочленные части (параболы).

Св.2.6 Для случая `p=0`, кроме, `N_{i,p}(u)` достигает ровно один максимальное значение.

Важно понять, каково влияние нескольких узлов. Рассмотрим функции `N_{0,2}`, `N_{1,2}`, `N_{2,2}`, `N_{5,2}`, и `N_{6,2}` на рис 2.6. Напоминая, что `U={0,0,0,1,2,3,4,4,5,5,5}` из уравнения (2.5) и Св.2.1, мы видим, что эти функции вычисляются по следующим промежуточным узлам и равны нулю вне этих интервалов

`N_{0,2} : {0,0,0,1}`

`N_{1,2} : {0,0,1,2}`

`N_{2,2} : {0,1,2,3}`

`N_{5,2} : {3,4,4,5}`

`N_{6,2} : {4,4,5,5}`

Теперь слово «множественность» понимается в двух разных смысл:
  • Кратность узла в векторе узлов;
  • Кратность узла по отношению к конкретной базисной функции.
Например, `u=0` имеет кратность три в предыдущем узловом векторе `U`. Но по отношению к функциям `N_{0,2}`, `N_{1,2}`, `N_{2,2}`, и `N_{5,2}`, `u=0` узел кратности 3, 2, 1, и 0, соответственно. Из Св.2.5, непрерывность этих функций в `u=0` является `N_{0,2}` разрывной; `N_{1,2}``C^0` непрерыв­но; `N_{2,2}``C^1` непрерывно; и `N_{5,2}` полностью неизменным (`N_{5,2}` и все ее производные равны нулю при `u=0`, с обеих сторон). `N_{1,2}` "видит" `u=0` как двойной узел, следовательно, `C^0` непрерывное. `N_{2,2}` «видит» все свои узлы с кратностью 1, таким образом, это `C^1` непрерыв­на всюду. Очевидно, что другой эффект нескольких узлов (как видно на функции), чтобы уменьшить количество "видимых" интервалов, на которых функция отлична от нуля; напри­мер, `N_{6,2}` отлична от нуля только на `u∈[4,5)`, и это только `C^0` непрерывна в `u=4` и `u=5`.